/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.services;

import fr.generali.accueilclient.client.om.IClientConsultation;
import fr.generali.accueilclient.client.om.IClientParticulier;
import fr.generali.accueilclient.client.om.IClientProfessionnel;
import fr.generali.accueilclient.client.om.IPersonne;
import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;

/**
 * Service pour tout ce qui concerne les données de recherche client
 * 
 * @author selrhazala
 */
public interface IConsultationClientService {

    /**
     * Effectue une lecture de la personne par numéro de client
     * 
     * @param criteres les critères de consultation
     * @return la personne
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IPersonne lireClientContact(IClientConsultation criteres) throws AccueilClientBusinessException;

    /**
     * Effectue une lecture "light" de la personne par numéro de client
     * 
     * @param criteres les critères de consultation
     * @return la personne
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IPersonne lireClientSimple(IClientConsultation criteres) throws AccueilClientBusinessException;
    
    /**
     * Effectue une lecture de la personne et de son environnement par numéro de client
     * 
     * @param criteres les critères de consultation
     * @return la personne
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IPersonne lireClientEnvironnementComplet(IClientConsultation criteres) throws AccueilClientBusinessException;
    
    /**
     * Effectue une lecture du Profil Marketing du client
     * 
     * @param criteres les critères de consultation
     * @param clientParticulier le client particulier
     * @return le client particulier enrichie de son Profil Marketing
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IClientParticulier lireProfilMarketingClient(IClientConsultation criteres, IClientParticulier clientParticulier) 
        throws AccueilClientBusinessException;
        
    /**
     * Effectue une lecture des indicateurs du client : nb Résidences/nb véhicules etc..
     * 
     * @param criteres les critères de consultation
     * @param client le client
     * @return la personne enrichie de ses indicateurs
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IPersonne lireIndicateursClient(IClientConsultation criteres, IPersonne client) 
        throws AccueilClientBusinessException;
    
    /**
     * Effectue une lecture des indicateurs du client côté sphere Professionnel : nb sites et nb véhicules etc..
     * 
     * @param client le client Professionnel
     * @return la personne enrichie de ses indicateurs
     * @throws AccueilClientBusinessException exception fonctionnelle
     */
    IPersonne lireIndicateursClientPro(IClientProfessionnel client) throws AccueilClientBusinessException;

}
